# -*- coding: utf-8 -*-

from plugmgr import plugin

__all__ = ['admin']

class admin(plugin):
    '''
    This class implements some administrator-level command
    '''
    requires = ['cmd','stanzas','config']
    export = ['setstatus','conflist','confget','confset','gonfget','gonfset'] # status4
    def __init__(self, bot):
        self.bot = bot
        for c in self.export:
            self.bot["cmd"].addHandler(c, eval('self.%s'%c))
    def unload(self):
        for c in self.export:
            self.bot["cmd"].removeHandler(c)
    def setstatus(self, c):
        ''' Changes status message '''
        # при изменении статуса тут - он поменяется также и во всех конфах
        # если это не желательно, то юзать  /confset status some message
        try:    s = c.args.strip().split(' ')
        except: c.reply(c._('Invalid syntax'))
        status = s[0]
        msg = ' '.join(s[1:])
        
        if status not in ('on','chat','away','xa','dnd'):
            msg = ' '.join((status,msg))
            status = 'chat'
        if status=='on':
            status = ''
        
        self.bot['stanzas'].setStatus(status,msg.strip(' '))
        c.reply(c._('Successful'))
    def status4(self, c):
        ''' Changes status message personally for user '''
        c.reply(c._('Not implemented yet'))
        # TODO // это будет в плагине muc, вместе со всем, что относится к конфам
        # а вот в ростере лучше не давать юзерам права персональной настройки,
        # чтоб не засрали конфиг (можно регить много аккаунтов, и ддосить таким образом базу конфига бота)
    def conflist(self, c):
        '''
        @config
        View all the config keys
        '''
        # показываем ключи, доступные юзеру на чтение
        c.reply(', '.join(self.bot['config'].keys(c.access())))
    def confget(self, c):
        '''
        @config
        Get config value personally for you.
        '''
        key = c.args.strip()
        try: reqr = self.bot["config"].getattrs(key)[0]
        except KeyError:
            c.reply(c._('Key not found'))
            return
        # может ли он смотреть это
        if reqr <= c.access(): c.reply(unicode(self.bot['config'][(c.source, key)]))
        else: c.reply(c._("Not allowed"))
    def confset(self, c):
        '''
        @config
        Set config value personally for you.
        '''
        args = c.args.strip().split(' ')
        try:    key, value = args[0], ' '.join(args[1:])
        except: c.reply(c._('Not enough actual parameters'))
        try: reqw = self.bot["config"].getattrs(key)[1]
        except KeyError:
            c.reply(c._('Key not found'))
            return
        # а может ли он менять это?
        if reqw <= c.access():
            self.bot['config'][(c.source, key)] = value
            c.reply(c._("Successful"))
        else: c.reply(c._("Not allowed"))
    def gonfget(self, c):
        '''
        @config
        Get global config value.
        '''
        key = c.args.strip()
        try: reqr = self.bot["config"].getattrs(key)[0]
        except KeyError:
            c.reply(c._('Key not found'))
            return
        # может ли он смотреть это
        if reqr <= c.access(): c.reply(unicode(self.bot['config'][key]))
        else: c.reply(c._("Not allowed"))
    def gonfset(self, c):
        '''
        @config
        Set global config value.
        '''
        args = c.args.strip().split(' ')
        try:    key, value = args[0], ' '.join(args[1:])
        except: c.reply(c._('Not enough actual parameters'))
        try: reqw = self.bot["config"].getattrs(key)[1]
        except KeyError:
            c.reply(c._('Key not found'))
            return
        # а может ли он менять это?
        if reqw <= c.access():
            self.bot['config'][key] = value
            c.reply(c._("Successful"))
        else: c.reply(c._("Not allowed"))
